
package TableModels;

import Attributes.Person;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import javax.swing.table.AbstractTableModel;

public class PersonaExtTableModel extends AbstractTableModel implements Observer {
    
    /*
     * clase PersonaExtTableModel
     * 
     * Esta clase provee un modelo de tabla de personas extendido.
     * 
     * Su vista proporciona todos los datos de las personas
     * con las que se carga el modelo.
     * 
     * Sus datos se deben cargar con el metodo load().
     * 
     * Es Observer de las personas que muestra; un cambio 
     * en estas se refleja automaticamente.
     * 
     * USO: 
     * 
     * JTable tabla; PersonaResTableModel modelo;
     * // creacion y carga del modelo
     * tabla.setModel(modelo);
     * 
     */
    private ArrayList<Person> personas;

    public void load(ArrayList<Person> personas) {
        this.personas = personas;

        for (Person p : personas) {
            p.addObserver(this);
        }
    }

    @Override
    public String getColumnName(int col) {
        if (personas != null && personas.size() > 0) {
            return personas.get(0).getAttribute(col).getName();
        }
        return null;
    }

    public int getRowCount() {
        if (personas != null) {
            return personas.size();
        }
        return 0;
    }

    public int getColumnCount() {
        if (personas != null && personas.size() > 0) {
            return personas.get(0).getNoAttributes();
        }
        return 0;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        if (personas != null) {
            return personas.get(rowIndex).getAttribute(columnIndex);
        }
        return null;
    }

    public void update(Observable o, Object arg) {
        fireTableDataChanged();
    }
}
